iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
1
自我挑戰組

神羅天征! 一起(爆肝)征服程式解題系列 第 14

[Day 14] LeetCode - 832 Flipping an Image

  • 分享至 

  • xImage
  •  

本篇同步發布於Blog: [解題] LeetCode - 832 Flipping an Image

平台:

LeetCode

題號:

832 - Flipping an Image

題目連結:

https://leetcode.com/problems/flipping-an-image/

題目說明:

        輸入1個二維陣列A,A的列與行的長度相等,求把這二維陣列翻轉的結果。翻轉的定義為先把每一列的值作順序倒轉,再把每個值從0改1、從1改0。

        比如範例輸入的

[1,1,0,0],

[1,0,0,1],

[0,1,1,1],

[1,0,1,0]

先做順序倒轉,變成

[0,0,1,1],

[1,0,0,1],

[1,1,1,0],

[0,1,0,1]

再做0改1、1改0,變成

[1,1,0,0],

[0,1,1,0],

[0,0,0,1],

[1,0,1,0]

解題方法:

    雙層迴圈,從陣列A的第1列開始循環,利用長度n - i - 1即可計算倒轉的順序索引值。

難度為Easy

程式碼 (C++ 與 C#):

#include <iostream>
#include <vector>
using namespace std;
 
class Solution {
public:
    vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
        int n = A.size();
        vector<vector<int>> ans;
 
        for(int i = 0 ;i < n;++i){
            vector<int> row(n);
            for(int j = 0;j < n;++j){
                row[n-j-1] = A[i][j] == 1 ? 0 : 1;
            }
 
            ans.push_back(row);
        }
 
        return ans;
    }
};
 
int main() {
	vector<vector<int>> A;
	vector<int> row1{1,1,0,0};
	vector<int> row2{1,0,0,1};
	vector<int> row3{0,1,1,1};
	vector<int> row4{1,0,1,0};
	A.push_back(row1);
	A.push_back(row2);
	A.push_back(row3);
	A.push_back(row4);
 
	Solution sol;
	vector<vector<int>> ans = sol.flipAndInvertImage(A);
	for(int i = 0 ; i < ans.size();++i){
		for(int j = 0 ; j < ans[i].size();++j){
			cout << " " << ans[i][j];
		}
		cout << endl;
	}
 
	return 0;
}
using System;
					
public class Program
{
	public class Solution {
		public int[][] FlipAndInvertImage(int[][] A) {
			int n = A.Length;
			int[][] ans = new int[n][];
			for(int i = 0 ; i < n;++i){
				ans[i] = new int[n];
			}

			for(int i = 0 ;i < n;++i){
				int[] row = new int[n];
				for(int j = 0;j < n;++j){
					row[n-j-1] = A[i][j] == 1 ? 0 : 1;
				}

				ans[i] = row;
			}

			return ans; 
		}
	}
	
	public static void Main()
	{
		int[][] A =
		{
			new int[] { 1,1,0,0 },
			new int[] { 1,0,0,1 },
			new int[] { 0,1,1,1 },
			new int[] { 1,0,1,0 }
		};
		
		Solution sol = new Solution();
		var ans = sol.FlipAndInvertImage(A);
		
		foreach(var row in ans){
			foreach(int col in row){
				Console.Write(" " + col);
			}
			Console.WriteLine();
		}
		
		Console.Read();
	}
}

GITHUB位置(C++ 與 C#):

https://github.com/u8989332/ProblemSolving/blob/master/LeetCode/C%2B%2B/800-899/832.cpp

https://github.com/u8989332/ProblemSolving/blob/master/LeetCode/C%23/800-899/832.cs


上一篇
[Day 13] LeetCode - 821 Shortest Distance to a Character
下一篇
[Day 15] LeetCode - 1047 Remove All Adjacent Duplicates In String
系列文
神羅天征! 一起(爆肝)征服程式解題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言